// 声明any类型
let a1:any;
a1 = 'ha'

// 声明unknown类型
let a2:unknown
a2 = 'ha'

let a3:string

// 此时不会报错，因为a1是any类型
a3 = a1
// 此时会报错，因为a2是unknown类型，比any严格，这就是与any的区别
// a3 = a2
// 解决办法1：判断一下是否为字符串类型
if(typeof a2 == 'string') {
    // 这样子就不会报错
    a3 = a2
}
// 解决办法2：类型断言
a3 = a2 as string
a3 = <string>a2

function demo1() {
    return 123
}

// function demo2(a):void {
//     if(a>0) {
//         return true
//     }else {
//         return 111
//     }
// }
function demo3():never {
    throw new Error('错误')
}

try {
    demo3()
} catch (error) {
    console.log(error)
}

let demo4 : {name:string,[propName:string]:any}
demo4 = {name:'ha',a1:1}

let a5:string[]

let demo5:{name:string,[propName:string]:any} 


// 类型的别名
type myType  = 1 | 2 

let a6:myType = 7  //这个会报错，只能是1或者2
let a7:myType = 1
